/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * Account Factory baseline configuration item.
 * @class
 */
class BaselineConfigItem extends  AbstractModel {
    constructor(){
        super();

        /**
         * A unique identifier for an Account Factory baseline item, which can only contain English letters, digits, and @,._[]-:()+=. It must be 2-128 characters long.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Identifier = null;

        /**
         * Account Factory baseline item configuration. Different items have different parameters.Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Configuration = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Identifier = 'Identifier' in params ? params.Identifier : null;
        this.Configuration = 'Configuration' in params ? params.Configuration : null;

    }
}

/**
 * BatchApplyAccountBaselines response structure.
 * @class
 */
class BatchApplyAccountBaselinesResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * BatchApplyAccountBaselines request structure.
 * @class
 */
class BatchApplyAccountBaselinesRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Member account UIN, which is also the UIN of the account to which the baseline is applied.
         * @type {Array.<number> || null}
         */
        this.MemberUinList = null;

        /**
         * List of baseline item configuration information.
         * @type {Array.<BaselineConfigItem> || null}
         */
        this.BaselineConfigItems = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.MemberUinList = 'MemberUinList' in params ? params.MemberUinList : null;

        if (params.BaselineConfigItems) {
            this.BaselineConfigItems = new Array();
            for (let z in params.BaselineConfigItems) {
                let obj = new BaselineConfigItem();
                obj.deserialize(params.BaselineConfigItems[z]);
                this.BaselineConfigItems.push(obj);
            }
        }

    }
}

module.exports = {
    BaselineConfigItem: BaselineConfigItem,
    BatchApplyAccountBaselinesResponse: BatchApplyAccountBaselinesResponse,
    BatchApplyAccountBaselinesRequest: BatchApplyAccountBaselinesRequest,

}
